Add jacobian_exp implementations for SE(2/3) and SGal(3) - #103
Conversation
|
Locally I only got 6 ambiguities: |
|
Thanks for the PR! LieGroups.jl/test/test_aqua.jl Line 20 in 1a25650 Thanks for the transparency on AI, then I will need more time to check the PR more closely – at lest the reference does exist 😄 edit: Oh I See, on CI it raised to 20; that we should carefully check, why that is the case; It was still 6 on last run of CI here, so I fear it is something in this PR then – and most probably interaction with the |
I really suck with writing documentation, but did explicitly tell AI what references to use for the docs and know them well, (they were already in use as well). |
Oh sorry! I was a bit quick there, since I only checked that it is not added in this PR, I did (sadly) not check whether it was already in there. Yeah I am not a fan of AI, but since I get told at least 3 times a day by now I should do everything with AI and spend all my personal money (no support by university there) on some mega-token plan – I gave up arguing against AI and am just fine when people are honest by now. |
|
Ahh, I know why I only got 6 ambiguities, my local environment was stil on ManifoldsBase v2.4.0: If I update to ManifoldsBase v2.5.0 I also get the same failure: |
|
The maths part should be fine, that was mostly me, but I did make some mistakes that was picked up. You will see the most complicated is for SGal and i referenced the equations from https://arxiv.org/pdf/2312.07555v11 directly. Edit: Objective look would be very welcome as I tested it against my own understanding, so not very objective. |
|
Oh! I remembered that we print the ambiguities, see https://github.com/JuliaManifolds/LieGroups.jl/actions/runs/29268851175/job/86881148111#step:6:316 And my guess was not wrong – it's always the identity – just that this one is on us, it's the new + and - ambiguities with the new ZeroVector type, so its not your fault and you can keep the ambiguity on 10 for now. I hope to remember an issue for that tomorrow then. |
|
I think it is complaining about methods like `+(::Identity{AdditionGroupOperation}, Y::ManifoldsBase.ZeroVector) which is not valid operations. Should we ignore it or maybe throw an ArgumentError? edit: ok I'll keep on 10 for now. |
|
Actually it is valid: We can really just define those 4 functions to return the identity argument of the two and we are fine. Indeed both types have exactly the same reason: we want to avoid allocating zeros. |
|
You are correct, I didn't think that far. I'll add those 4 methods tomorrow. |
|
Like this: |
|
Yes. Exactly that. Perfect :) Thanks for adding them even here (and fixing our problem there) – maybe even add a short note to the changelog just for completeness :) |
kellertuer
left a comment
There was a problem hiding this comment.
Here is a first few comments. I did not find the time yet to check/render the docs locally,
but the code in general looks fine to me
|
I'm a bit confused here. Is this the Jacobian of the group exponential or special cases of |
|
Oh I was confused by that as well, but wanted to first check more closely whether that is on me ;) To provide detail here: the base point one is the differential with respect to g (X fixed) and the arg one is the one with respect to X (g fixed). |
I saw this and followed the existing pattern, eg: LieGroups.jl/src/groups/special_orthogonal_group.jl Lines 122 to 133 in 1a25650 I wasn't too sure about the |
…in addition operations
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #103 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 36 36
Lines 2899 3066 +167
==========================================
+ Hits 2899 3066 +167 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-authored-by: Ronny Bergmann <git@ronnybergmann.net>
|
I see, I forgot that already exists. I've checked the discussion in #65 and I have no clue why the |
|
Hm, I mean this #65 (comment) definitely says that we only have exp_arg here, so there is no need to do the base one – and to then pass on the the manifold (arg) jac exp?. I think what we could do, is the same as the default described herre and do kind of both – but one for each. I am just not sure which should be the default to implement, but I think the second one is probably nicer to implement and the first push-forward-defaults. I hope this is – given the early evening time – not written in too confusing words. |
|
Yes, that comment explains that it's essentially
That makes sense to me.
The "no |
The interface and tests are also affected and it looks like only one group was implemented (SO2/3). So it looks easier to drop and deprecate the |
|
Hi @kellertuer, so this is little sucky and sorry to push on it, but... TLDR; I'm a bit upset at what looks like a double standard, and I think we have contributed enough to not be so buried. I would like to see "[J. Terblanche and] NavAbility Contributors et al" at the same level as any other contributors, with clear distinction from "Maintainers" per your comment. Just so you are aware, we have contributed easily $30k+ specifically to LieGroups.jl's benefit -- i.e. made possible Johan's 11 PRs thus far (which are original or derive from earlier work by others). I would have thought you'd want to expand the number of maintainers. Please notice that I'm not trying to get my name on your this repo nor on Manifolds.jl / Manopt.jl / etc. Guess, I'd feel better if you
Yeah, bit sucky but I wouldn't push if I didn't think it is a fair request. Also, I will not push the topic again, but please know that this does matter. Current screen capture
|
|
Sorry, I do not understand what you are writing
I have not yet seen a single cent in what so ever from my open source contributions. I do all this somewhere in my free time and evenings and I am currently getting more and more backlash – my packages are no good – I should spent more time on grants / AI / AI / AI / producing less bugs / produce better packages / ...
There is exactly one standard. Each contributor listed was a long time contributor to either this package directly, or for Seth and Olivier, the main contributors to the code base that was “extracted” from Manifolds.jl. This is exactly one standard that I already explained. That is exactly one consistent standard throughout all JuliaManifolds packages.
That is already the case: The proceeding paper accompanying last JuliaCons talk lists the two active maintainers. The Zenodo former and current contributors – the Project.toml lists all former and current maintainers.. Also there is no excess – all references are collapsed by default, your screenshot is very misleading.
This I simply do not understand. Literature is listed on the References page in the docs? I am unsure what you refer to here. Note that the previous discussion on your proposal of a change was not even closed by me but by Johannes. There I explained how we handle naming contributors, what distinguishes them from maintainers. I have nothing to add to that explanation. But I can repeat that here again: Johannes is already listed on the about page: https://juliamanifolds.github.io/LieGroups.jl/stable/about/ – he can join the metadata. That's it. The company will not be added extra. The money note I absolutely do not get. What are you trying to indicate there? That you can buy something? That you are cool? But you are not alone, I get more and more complaints recently: Manopt.jl is not performant enough – that could all be done much much better, things like that. So, TLDR: I explained the rules and offered what we can do and what the standard is (there is no double standard – again). The company name is a no go for me also in the metadata. Let me know what you think – if you like, also about my thoughts whether I should continue the development or your intentions are to stop me from contributing to FOSS. |
|
Hi @kellertuer — for my part, I think the recognition here is already good — my name and affiliation (WhereWhen.ai Technologies Inc., operating as NavAbility) are listed as a contributor in .zenodo.json, which I think covers what matters to me. I don't have a strong opinion on the maintainer/contributor tiers beyond that, that's your call to make as the person who's carried this project. I've genuinely learned a lot working through this and previous PRs with you and think these have been a team effort, with a lot of help along the way from you and Mateusz. Happy to keep going on the remaining review comments whenever you have time. |
Co-authored-by: Johannes Terblanche <6612981+Affie@users.noreply.github.com>
|
I was now even confused for a second – since this PR does not change the Zenodo metadata – but you already are in there. And sure therein, the affiliation is totally up to you. For this PR, the only thing I noticed now in the files I have not yet marked as read: In the extension we now have doc strings. This also would lead to the point they can only “be read” once the extension is loaded. Besides that, we should only remember to set the date in the news before merging the PR. So again concerning maintaintership:
From a maintainer I would expect to work on issues opened by users, actively fix bugs and such – and yes with my other obligations and this package not seeming to be used much (or at least less than the others), I did not find the time to work on those. A company can not do that per se. So a company as a maintainer is a no go for me (unless all maintainers are from that company maybe). Whether you feel you want to step up to those obligations mentioned – I do not know? |
Good point on the doc strings. Right now the whole SGal group implementation depends on the RecursiveArrayTools extension (via ArrayPartition) — there's no pure matrix-form implementation yet. So it's less "these specific functions need the extension" and more "SGal itself only works once the extension is loaded." The SGal group constructor does have a "The ArrayPartition (default) implementation requires RecursiveArrayTools.jl to be loaded. The matrix representation is not implemented yet." line. I looked at ProductLieGroup as that also only works with the RAT extension, that throws a clear error when you try to use it: "This error could be resolved by importing RecursiveArrayTools.jl.". The ProductLieGroup doc strings doesn't mention RAT. The "This error could be resolved by importing RecursiveArrayTools.jl." way might be the clearest, but I could not find that yet. |
I saw you normally set the date and bump the version just before release in a separate PR. |
|
Luckily Maintainers are also Magicians. ;) (Joke aside, it helps a bit when maintainers have a reasonable overview on the code base) There is two ways to provide a good error (besides adding the note to the doc string). A very clean method is adding error hints like and I was surprised we have nearly none for RAT. There we used another trick, probably from before the error hints existed we check whether one allocates on a product manifold hit that default case there. Before you reach this array case, you come from This is where you see that message from :) or do not see it after loading I personally like the hint better since it keeps the original error message. |
since we twiddle with that function here, we can also do that here, no need to do a separate PR I think. |

Hi, this PR adds
jacobian_expfor SE(2/3), SGal(3), ProductLieGroups, and Abelian Groups.I did use claude quite a bit especially for the documentation and tests.
We use it here (this file also contains some fall-backs and matrix group and algebra adjoints that might be worth upstreaming):
https://github.com/JuliaRobotics/ApproxManifoldProducts.jl/blob/b16ea75a69e051374b58064159ad732d9c74f18b/src/services/ManifoldsOverloads.jl#L88